package com.wjn.basic.java8.lamda;

import lombok.Data;

/**
 * java新增lamda表达式---回调函数(单方法接口interface)，java8 lamda  直接返回实现类
 *
 * Lambda表达式语法由参数列表、->和函数体组成。函数体既可以是一个表达式也可以是一个代码块{}。
 *
 */
@Data
public class LamdaInterface {
    public String userName;

     public LamdaInterface(){
     }

    //通过lamda表达式   直接返回接口实现类
    MathOperation subtraction = (a, b) -> a - b;
    MathOperation addtraction = (a, b) -> a + b;


    public static void main(String[] args) {
        LamdaInterface lamdaInterface =new LamdaInterface();
        int cc= lamdaInterface.operate(30,10, lamdaInterface.subtraction);
        int dd= lamdaInterface.operate(40,50, lamdaInterface.addtraction);
        System.out.println(cc);
        System.out.println(dd);


        //java8之前调用方式，代码冗余较多
        int addtraction= lamdaInterface.operate(50,60,new MathOperation(){

            @Override
            public int operation(int a, int b) {
                return a+b;
            }
        });

        //java8之后调用，使用lamda减少代码冗余
        int num= lamdaInterface.operate(50,60,(a,b)-> a+b);

        System.out.println(addtraction);
        System.out.println(num);



    }
    //只有一个方法的接口
    interface MathOperation {
        int operation(int a, int b);
    }


    private int operate(int a, int b, MathOperation mathOperation){
        //调用接口实现类方法
        return mathOperation.operation(a, b);
    }



}
